import fs from "fs";
const { stat } = fs;

/**
 * 文件复制
 * @param src 需要复制的目录
 * @param dst 复制到指定的目录，默认为当前文件夹
 */
const Copyfile = (src: string, dst: string = "./") => {
  // 读取目录中的所有文件/目录
  fs.readdir(src, (err: any, paths: string[]) => {
    if (err) {
      throw err;
    }

    paths.forEach(function (path) {
      var _src = src + "/" + path,
        _dst = dst + "/" + path,
        readable,
        writable;

      stat(_src, function (err, st) {
        if (err) {
          throw err;
        }

        // 判断是否为文件
        if (st.isFile()) {
          // 创建读取流
          readable = fs.createReadStream(_src);
          // 创建写入流
          writable = fs.createWriteStream(_dst);
          // 通过管道来传输流
          readable.pipe(writable);
        }
        // 如果是目录则递归调用自身
        else if (st.isDirectory()) {
          exists(_src, _dst, Copyfile);
        }
      });
    });
  });
};
// 在复制目录前需要判断该目录是否存在，不存在需要先创建目录
const exists = (
  src: string,
  dst: string,
  callback: (src: string, dst: string) => void
) => {
  fs.exists(dst, function (exists) {
    // 已存在
    if (exists) {
      callback(src, dst);
    }
    // 不存在
    else {
      fs.mkdir(dst, function () {
        callback(src, dst);
      });
    }
  });
};

export default Copyfile;
